/*****************************************************************************************
 * ETS
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #3
 * �tudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		CollectionDes.java
 * Description:	
 * 			Cette classe enregistre et gere une liste de joueurs. Elle fait tous les traitements 
 * intératives de la liste de joueur.  
 * Date de creation:	2013-11-01
 * Date dern. modif.:	2013-11-12
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-11-01 Version initiale
 * 2013-11-11 Impl�mentation des fonctions
 * 2013-11-12 Ajout de la documentation
 *****************************************************************************************/

package com.mq.etsmtl.framework;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class CollectionDes 
{
	/**
	 * Liste de dés
	 */
	private List<De> listeDes;
	/**
	 * Constructeur avec le nombres de dés et le nombre de faces passés en parametre
	 * @param nombreDes est le nombre de dés
	 * @param nombreFaces est le nombre de faces pour chaque dé.
	 * @throws IllegalArgumentException Lorsque le nombre de faces est inférieur à 2
	 */
	public CollectionDes(int nombreDes,int nombreFaces)
	{
		if(nombreDes>0)
		{
			listeDes=new LinkedList<De>();
			for(int i=0;i<nombreDes;i++)
			{
				this.ajouterDe(nombreFaces);
			}
		}
		else throw new IllegalArgumentException();
	}
	/**
	 *  void jouerMain() appel la méthode lancerDes() pour chaque dé
	 */
	public void jouerMain()
	{
		Iterator<De> tmpIterator = this.getIterateurDes();
		while(tmpIterator.hasNext())
		{
			De temp= tmpIterator.next();
			temp.lancerDes();
		}
	}
	/**
	 * 
	 * @return un tableau de int qui contient la face courant de chaque dés
	 */
	public int[] montrerMain()
	{
		int[] resultat=new int[listeDes.size()];
		for(int i=0;i<listeDes.size();i++)
		{
			resultat[i]=listeDes.get(i).getFaceCourant();
		}
		return resultat;
	}
	/**
	 * 
	 * @param nbreFaces nombre de faces du dé
	 * @see AbstractDeFactory
	 */
	public void ajouterDe(int nbreFaces)
	{
	    De temp=AbstractDeFactory.genererDe(nbreFaces);
	    if(temp!=null)
	    {
	    	listeDes.add(temp);
	    }
	}
	/**
	 * 
	 * @return le nombre de dés qui contient la collection
	 */
	public int nombreDes()
	{
		return listeDes.size();
	}
	/**
	 * 
	 * @return l'iterateur de collection
	 */
	public Iterator<De> getIterateurDes() 
	{
		return listeDes.iterator();
	}
}
